﻿using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace MwanaDOC
{
    public partial class Form1 : ComponentFactory.Krypton.Toolkit.KryptonForm
    {
        LogToFile lg = new LogToFile();
        public static List<BindingSource> bsGeral = new List<BindingSource>();

        public Form1()
        {
            InitializeComponent();
            this.Load += new EventHandler(Form1_Load1);
        }

        void Form1_Load1(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }

        private void kryptonButton1_Click(object sender, EventArgs e)
        {

        }

        private void novoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //painelCentral.Hide();

         
            cadDoc caddoc = cadDoc.getFrmFilho(Global.Modo.Novo);

            painelCentral.Controls.Clear();
            painelCentral.Controls.Add(caddoc);
            this.AcceptButton = caddoc.btnGuardar;
            this.CancelButton = caddoc.btnCancelar;
            caddoc.Dock = DockStyle.Fill;
            caddoc.Visible = true;
            this.estado.Text = "Cadastro de Documento";

            //caddoc.MdiParent = this;
            //caddoc.Show();
            //caddoc.WindowState = FormWindowState.Maximized;
            //caddoc.ShowIcon = false;
            //caddoc.BringToFront();
            //caddoc.Disposed += new EventHandler(caddoc_Disposed);
            
        }

        void caddoc_Disposed(object sender, EventArgs e)
        {
            cadDoc.killFrmChild();
            painelCentral.Show();
        }

        private void cadastrarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //painelCentral.Hide();

            cadMat cadmat = cadMat.getFrmFilho(Global.Modo.Novo);

            painelCentral.Controls.Clear();
            painelCentral.Controls.Add(cadmat);
            this.AcceptButton = cadmat.btnGuardar;
            this.CancelButton = cadmat.btnCancelar;
            cadmat.Dock = DockStyle.Fill;
            cadmat.Visible = true;
            this.estado.Text = "Cadastro da Disciplina";


            ////cadmat.MdiParent = this;
            //cadmat.Show();
            ////cadmat.WindowState = FormWindowState.Maximized;
            ////cadmat.ShowIcon = false;
            //cadmat.BringToFront();
            //cadmat.Disposed += new EventHandler(cadmat_Disposed);
        }

        void cadmat_Disposed(object sender, EventArgs e)
        {
            cadMat.killFormChild();
            painelCentral.Show();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
        }

        private void dataBindBuscaPainelCentrar()
        { 
            Documento doc = new Documento();
            BindingSource bsResultados = doc.getByContent(txtTextoProcura.Text);
            dgvResultados.DataSource = bsResultados;
            dgvResultados.Refresh();
            
            if (bsResultados.Count <= 0)
            {
                lblResultado.Text = "Nenhum arquivo encontrado";
            }
            else if (bsResultados.Count == 1)
            {
                lblResultado.Text = "Resultado";
            }
            else
            {
                lblResultado.Text = "Resultados";
            }

            //doc.getByContent(txtTextoProcura.Text);
            //foreach (BindingSource bs in bsGeral)
            //{
            //    dgvResultados.DataSource = bs;
            //    dgvResultados.Refresh();
            //}
        }

        private void btnProcurar_Click(object sender, EventArgs e)
        {
            dataBindBuscaPainelCentrar();
        }

        private void txtTextoProcura_TextChanged(object sender, EventArgs e)
        {
            lblResultado.Text = "";
            //txtTextoProcura.TextChanged +=new EventHandler(txtTextoProcura_TextChanged1);
        }

        //private void txtTextoProcura_TextChanged1(object sender, EventArgs e)
        //{
        //    if (!txtTextoProcura.Text.Equals(""))
        //        dataBindBuscaPainelCentrar();
        //}
        private void txtTextoProcura_Click(object sender, EventArgs e)
        {
            lblResultado.Text = "";
        }

        private void abrirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Documento doc1 = new Documento();
            //string endereco;
            //string _titulo = dgvResultados.Rows[0].Cells[1].Value.ToString();
            //MessageBox.Show(_titulo);
           
            ////endereco = doc1.getDocPath(_titulo);
        }

        private void dgvResultados_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            Documento doc1 = new Documento();
            string endereco;
            //Prevenindo o ArgumentAutOfBound Exception
            try
            {
                string _titulo = dgvResultados.Rows[e.RowIndex].Cells[1].Value.ToString();
                endereco = doc1.getDocPath(_titulo);
                Process.Start(endereco);
            }
            catch (ArgumentOutOfRangeException index)
            {
                lg.log(this.GetType().Name, "dgvResultados_CellDoubleClick", index.Message, index.StackTrace);
            }
            catch (FileNotFoundException err)
            {
                MessageBox.Show("Arquivo não encontrado");
                lg.log(this.GetType().Name, "dgvResultados_CellDoubleClick", err.Message, err.StackTrace);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Impossível completar operação\nDetalhes do Erro: " + ex.Message, "Erro inesperado!");
                lg.log(this.GetType().Name, "dgvResultados_CellDoubleClick", ex.Message, ex.StackTrace);
            }

        }

        private void listarPorDisciToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string cod;
            frmDialog box = new frmDialog();
            box.ShowDialog();

            if (box.DialogResult == DialogResult.OK)
            {
                cod = box.Message;
                ctrlListarDocumentosPorDisciplina lstDisc =new ctrlListarDocumentosPorDisciplina(cod);

                this.painelCentral.Controls.Clear();
                this.painelCentral.Controls.Add(lstDisc);
                lstDisc.Dock = DockStyle.Fill;
                lstDisc.Visible = true;
                this.estado.Text = "Lista de Documentos por disciplina";
            }
        }

        private void buscarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ctrlBuscaPorConteudo lstContent = new ctrlBuscaPorConteudo();

            this.painelCentral.Controls.Clear();
            this.painelCentral.Controls.Add(lstContent);
            this.AcceptButton = lstContent.btnProcurar;
            lstContent.Dock = DockStyle.Fill;
            lstContent.Visible = true;
            this.estado.Text = "Lista de Documentos que contêm "+txtTextoProcura.Text;
        }

        private void buscaAvançadaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ctrlBuscaDetalhada lstDetalhada = new ctrlBuscaDetalhada();

            this.painelCentral.Controls.Clear();
            this.painelCentral.Controls.Add(lstDetalhada);
            this.AcceptButton = lstDetalhada.btnBuscar;
            lstDetalhada.Dock = DockStyle.Fill;
            lstDetalhada.Visible = true;
            this.estado.Text = "Busca Avançada";
        }

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            if (this.Size == this.MaximumSize)
            {
                btnSair.Visible = true;
            }
            else
            {
                btnSair.Visible = false;
            }
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            string appData;  //Pasta raiz para a aplicação
            string dbFile;
            string dataFolder; //Pasta do banco de dados
            string backupFolder;  //Pasta para os backups

            appData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
            appData = appData + "\\MwanaDOC";

            

            //Vrificar se existe a appData

            if (!Directory.Exists(appData))
            {
                backgroundWorker1.ReportProgress(0, "criando diretório da aplicação");
                Directory.CreateDirectory(appData);
                              
            }

            dataFolder = appData + "\\Dados";

            if (!Directory.Exists(dataFolder))
            {
                backgroundWorker1.ReportProgress(10, "Criando diretório de dados");
                Directory.CreateDirectory(dataFolder);
            }

            dbFile = dataFolder +"\\data.db3";

            if  (!File.Exists(dbFile))
            {
                backgroundWorker1.ReportProgress(50,"Criando o banco de dados");
                File.Copy(Global.cleanDataFile, dbFile,true);
            }

            //verificar o diretório de backups
            if (!Directory.Exists(appData+"\\backup"))
            {
                backgroundWorker1.ReportProgress(65, "Criando diretório de backups");
                Directory.CreateDirectory(appData+"\\backup");
            }
            //verificar o diretório lixeira
            if (!Directory.Exists(Global.lixeira))
            {
                backgroundWorker1.ReportProgress(70, "Criando diretório de backups");
                Directory.CreateDirectory(Global.lixeira);
            }
            //Virifica diretório de arquivos
            if (!Directory.Exists(Global.baseDir))
            {
                backgroundWorker1.ReportProgress(75, "Criando o diretório de arquivos");
                Directory.CreateDirectory(Global.baseDir);
            }
            //Arquivo de log
            if (!File.Exists(Global.logFileAddr))
            {
                backgroundWorker1.ReportProgress(80, "Criando o arquivo de log");
                //File.Create(Global.logFileAddr);
                using(FileStream fs = new FileStream(Global.logFileAddr,FileMode.OpenOrCreate))
                {
                    using (StreamWriter sw = new StreamWriter(fs))
                    {
                        sw.WriteLine("MwanaDOC- ARQUIVO DE LOG DO SISTEMA");
                        sw.WriteLine("Criado em "+DateTime.Now.ToShortDateString()+" a(s) "+DateTime.Now.ToLongTimeString());
                        sw.WriteLine("");
                        sw.WriteLine("=> COLABORE NA MELHORIA DESTE PROGRAMA ENVIANDO ESTE ARQUIVO PARA lupazu@gmail.com ou pelo site http://www.mwanalezi.somee.com/support");
                        sw.WriteLine("=======================================================================================================================================");
                        sw.WriteLine("");
                        sw.WriteLine("");
                    }
                }
            }
            
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            estado.Text = e.UserState.ToString();
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            progresso.Value = progresso.Maximum;
            estado.Text = "Pronto";
            
        }

        private void editarToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            ctrlListaDisciplinas lstDisciplinas = new ctrlListaDisciplinas();

            this.painelCentral.Controls.Clear();
            this.painelCentral.Controls.Add(lstDisciplinas);
            lstDisciplinas.Dock = DockStyle.Fill;
            lstDisciplinas.Visible = true;
            this.estado.Text = "Lista de Disciplinas";
        }

        private void criarBackupToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Ctrlbackup backup = new Ctrlbackup();
            this.painelCentral.Controls.Clear();
            this.painelCentral.Controls.Add(backup);
            backup.Dock = DockStyle.Fill;
            backup.Visible = true;
            this.estado.Text = "Criar Backup";
        }

        private void salvarBackupToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CtrlBackupRestore backuprst = new CtrlBackupRestore();
            this.painelCentral.Controls.Clear();
            this.painelCentral.Controls.Add(backuprst);
            backuprst.Dock = DockStyle.Fill;
            backuprst.Visible = true;
            this.estado.Text = "Restaurar Backup";
        }

        private void sobreToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmSobre sobre= new frmSobre();
            sobre.ShowDialog();

        }
        

       }
}
